package chapter08_oop._inner;

/**
 * ClassName: OuterClassTest
 * Package: capter08._inner
 * Description:
 *
 * 1. 如何创建成员内部类的实例
 * 2. 如何在成员内部类中调用外部类的结构
 *
 * @Author SherryAn
 * @Create 2025/7/22 12:08
 */
public class OuterClassTest {
    public static void main(String[] args) {

//    创建Person的静态的成员内部类的实例
    Person.Dog dog=new Person.Dog();
    dog.eat();
//    创建Person的非静态的成员内部类的实例
    Person p1=new Person();
    Person.Bird bird=p1.new Bird();
    bird.eat();
    bird.show("黄鹂");
    bird.show1();

    }
}


class Person{//外部类
    String name="Tom";
    int age=12;

//    内部类
//    静态的成员内部类
    static class Dog{
        public void eat(){
            System.out.println("啃骨头");
        }
    }
//    非静态的成员内部类
    class Bird{
    String name="啄木鸟";
    public void eat(){
        System.out.println("吃虫子");
    }

    public void show(String name){
        System.out.println("age:"+age);//调用的是外部类的age
        System.out.println("name:"+name);//调用的是形参的name
        System.out.println("name:"+this.name);//调用的是内部类的name
        System.out.println("name:"+Person.this.name);//调用的是外部类的name
   }
    public void show1(){
        Person.this.eat();
    }
    }

//    Person类中的方法
    public void eat(){
        System.out.println("人吃饭");
    }

    public void method(){
//        方法中的局部内部类
        class InnerClass1{

        }

    }
    public Person(){
//        构造器中的局部内部类
        class InnerClass1{

        }
    }
}
